Windows HIPS防护面

1. 防护范围

Windows HIPS (Host Intrusion Prevent System) 主机入侵防御系统核心部分可以归纳为3D,即AD(Application Defend,应用程序防御体系)、RD(Registry Defend,注册表防御体系)和FD(File Defend,文件防御体系)。另外还有ND(Network Defend,网络防火墙)及DD(Device Defend,设备/外设防护),后两者也算是管控的范畴

2. AD

Windows的用户权限管理比较宽松,AD防护不仅复杂还面临较大的攻击面:

针对AD防护,仅利用系统内核层回调很难达成全面防护,只有当攻击已发生且已经成功的情况下才能发现攻击,此时恶意攻击已然达成。AD防护的短板极有必要采用R0或R3 HOOK的方式予以弥补和加固。

操作 方式 说明
创建 - 通用回调可以在进程启动时得到通知,但在“进程为什么会启动”的原因上缺少必要信息,R0/R3 HOOK可以作为必要的补充手段来实现全方面的进程监控
普通进程 在进程加载阶段可侦测,可采用手段:FD及通用回调
脚本程序 可侦测,如cmd batch、powershell、python及WScript或CScript等,可侦测到解释程序的启动及相关命令行参数
计划任务 可侦测,可通过父进程判断是不是计划任务,但计划任务的创建无从感知。当然计划任务的创建亦可从文件系统层感知并发现,但此方式只是个间接方案
服务创建及修改 加载时通过进程回调可侦测,服务创建及修改可通过RD侦测
驱动创建及修改 同服务
WMI串链 可侦测新进程启动,但不能定位由谁创建
DCOM串链 可侦测,但不能定位原始启动进程
DDE加载 可侦测
MSI安装拦截 可侦测
PICO/WSL进程 可发现、可拦截(Win10系统)
...
结束 - 通用回调可以在得到进程退出通知,但时机上已经太晚了;只能通过R3或R0 HOOK实现更早和更好时机上的拦截
窗口消息 通过SendMessage/PostMessage/PostThreadMessage方式直接发送退出消息
动作模拟 通过模拟按键及鼠标输入,直接发送ALT+F4或者鼠标点击事件
结束进程 TerminateProcess/NtTerminateProcess
停止或结束线程 SuspendThread/TerminateThread/ NtSuspendTHread/NtTerminateThread
调试模式 NtDebugActiveProcess DebugSetProcessKillOnExit ...
job调度 通过AssignProcessToJobObject及TerminateJobObject强制关闭进程,或通过job作业限制进程的执行调度
WMI利用
WinStation
执行劫持 通过远程线程、APC或SetThreadContext将流程导向ExitProcess
资源耗尽 耗尽进程的Handle/VM资源等以造成程序运行错误
镜像破坏 通过VirtualProtectEx改变关键页面属性至PAGE_NOACCESS等,或通过WriteProcessMemory进行破坏
内核攻击 方式非常多,不在我们考虑之列
...
注入 - 在R3 HOOK统一框架设计中有详细描述,在此只简单列举常用方式。通过模块加载系统回调可以感知注入事件的发生,但不能直接拦截
APC注入 R0及R3均可攻击,除R0/R3 HOOK外没有好的方案
远程线程注入 R0及R3均可攻击,可通过线程创建回调侦测到
消息钩子 可通过模块加载侦测,但无法溯源至“消息钩子”
线程Context劫持 R0及R3均可攻击,不可侦测,只能采用HOOK方案
内存写入 R0及R3均可攻击,不可侦测,只能采用HOOK方案
UserModeCallback 不可侦测,只能采用HOOK方案
Section Un-mapping 不可侦测:UnMapViewOfSection/NtUnmapViewOfSectionEx
SetWindowLong[Ptr]注入 不可侦测,只能采用HOOK方案
打印、输入法注入 可通过模块回调侦测到,但无法溯源
DLL劫持 DLL搜索路径篡改、DLL文件替换等
...
其它 - 隐私窃取、信息泄漏
消息拦截 不可侦测
KeyLogger 一般均是通过DLL注入实现
白利用、提权、沙箱逃逸 发现与拦截均有难度

3. RD

RD防护通过注册表操作回调基本可以达成我们针对注册表操作的监控、审计及拦截的需求。注册表回调操作自Windows XP系统之后均有支持,但XP系统的支持并不完善,有可能需要采用OB HOOK等方式以弥补回调功能的缺失。

Vista之后系统针对注册表操作增加了事务处理,WDK已有演示程序。

操作 前置回调 后置回调
键删除 RegNtPreDeleteKey RegNtPostDeleteKey: SRV2003
值创建、改变 RegNtPreSetValueKey RegNtPostSetValueKey: SRV2003
值删除 RegNtPreDeleteValueKey RegNtPostDeleteValueKey: SRV2003
键属性修改 RegNtPreSetInformationKey RegNtPostSetInformationKey: SRV2003
键改名 RegNtPreRenameKey RegNtPostRenameKey: SRV2003
子键枚举 RegNtPreEnumerateKey RegNtPostEnumerateKey: SRV2003
值枚举 RegNtPreEnumerateValueKey RegNtPostEnumerateValueKey: SRV2003
获取键信息 RegNtPreQueryKey RegNtPostQueryKey: SRV2003
值内容提取 RegNtPreQueryValueKey RegNtPostQueryValueKey: SRV2003
RegNtPreQueryMultipleValueKey RegNtPostQueryMultipleValueKey: SRV2003
子键创建 RegNtPreCreateKey RegNtPostCreateKey
子键创建 RegNtPreCreateKeyEx: SRV2003 RegNtPostCreateKeyEx: SRV2003
子键打开 RegNtPreOpenKey RegNtPostOpenKey
子键打开 RegNtPreOpenKeyEx: SRV2003 RegNtPostOpenKeyEx: SRV2003
子键关闭 RegNtPreKeyHandleClose RegNtPostKeyHandleClose: SRV2003
RegNtPreFlushKey: VISTA RegNtPostFlushKey: VISTA
RegNtPreLoadKey: VISTA RegNtPostLoadKey: VISTA
RegNtPreUnLoadKey: VISTA RegNtPostUnLoadKey: VISTA
安全描述符提取 RegNtPreQueryKeySecurity: VISTA RegNtPostQueryKeySecurity: VISTA
安全描述符设置 RegNtPreSetKeySecurity: VISTA RegNtPostSetKeySecurity: VISTA
RegNtPreRestoreKey: VISTA SP2 RegNtPostRestoreKey: VISTA SP2
RegNtPreSaveKey: VISTA SP2 RegNtPostSaveKey: VISTA SP2
RegNtPreReplaceKey: VISTA SP2 RegNtPostReplaceKey: VISTA SP2
RegNtPreQueryKeyName: WIN10 RegNtPostQueryKeyName: WIN10
RegNtCallbackObjectContextCleanup: VISTA

4. FD

针对FD的防护将基于Windows FS Mini Filter架构实现,Windows FS Mini Filter可支持Win2k SP4、XP SP2及最新的Windows操作系统。XP及Win2k系统上的支持最新版本Windows的支持有些差别,在实现时要多加注意。另外Vista之后文件操作事务的支持增加了攻击面,使得针对文件的攻击手段更加隐蔽,因此文件事务操作的支持是必须的。

Mini Filter框架不仅可对本地及网络文件进行监控,亦支持邮槽及命名管道的操作监控,后期可根据实际需求进行灵活扩展。

操作 描述 备注
IRP_MJ_CREATE 文件打开、删除、覆写(清空)操作
IRP_MJ_CLEANUP 文件句柄关闭
IRP_MJ_CLOSE
IRP_MJ_CREATE_MAILSLOT 只针对邮槽驱动
IRP_MJ_CREATE_NAMED_PIPE 只针对管道驱动
IRP_MJ_DEVICE_CONTROL 与应用层通信、存储设备通信
IRP_MJ_DIRECTORY_CONTROL 目录项管理
IRP_MJ_FILE_SYSTEM_CONTROL
IRP_MJ_FLUSH_BUFFERS
IRP_MJ_INTERNAL_DEVICE_CONTROL
IRP_MJ_LOCK_CONTROL byte range lock(flock)支持
IRP_MJ_PNP 设备热插拔处理
IRP_MJ_QUERY_EA EA数据流处理
IRP_MJ_QUERY_INFORMATION 文件信息处理
IRP_MJ_QUERY_QUOTA 用户Quota支持
IRP_MJ_QUERY_SECURITY 安全属性及安全描述
IRP_MJ_QUERY_VOLUME_INFORMATION 卷属性操作
IRP_MJ_READ 读操作
IRP_MJ_SET_EA EA创建或写入
IRP_MJ_SET_INFORMATION 设置文件信息、改名、删除文件等
IRP_MJ_SET_QUOTA 设置用户Quota
IRP_MJ_SET_SECURITY 设置安全描述符
IRP_MJ_SET_VOLUME_INFORMATION 设置卷属性、卷标信息
IRP_MJ_SHUTDOWN 关机事件
IRP_MJ_SYSTEM_CONTROL WMI
IRP_MJ_WRITE 写操作
IRP_MJ_ACQUIRE_FOR_CC_FLUSH 锁操作回调
IRP_MJ_ACQUIRE_FOR_MOD_WRITE 锁操作回调: mmap
IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION 锁操作回调: Section首次创建
IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE Fast i/o调用检测
IRP_MJ_MDL_READ MDL i/o,一般用于SRV
IRP_MJ_MDL_READ_COMPLETE
IRP_MJ_MDL_WRITE_COMPLETE
IRP_MJ_NETWORK_QUERY_OPEN
IRP_MJ_PREPARE_MDL_WRITE
IRP_MJ_RELEASE_FOR_CC_FLUSH 锁操作回调
IRP_MJ_RELEASE_FOR_MOD_WRITE 锁操作回调
IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION 锁操作回调
IRP_MJ_VOLUME_DISMOUNT 卷卸载操作
IRP_MJ_VOLUME_MOUNT 新卷加载操作

5. ND

ND所实现的就是一个轻量的防火墙,可以将五元组信息与进程进行关联。Windows的网络框架随不同的版本有较大的变动,NDIS、TDI、WSK/Winsock Kernel、WFP/Windows Filter Platform

6. DD

DD即设备防护,主要应用于对外设的管控,可实现设备的停用或限制

7. 参考链接

1: Magnesium Object Manager Sandbox, A More Effective Sandbox Method for Windows 7

2: MSDN: Filtering Registry Calls

3: Filter Manager Support for Minifilter Drivers

4: MSDN: REG_NOTIFY_CLASS enumeration

5: CodeMachine: Kernel Callback Functions

6: OSR: Kernel Mode Extensions Driver

7: WDK Samples: Registry Logging

8: https://blog.csdn.net/whatday/article/details/52623878

9: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/handling-notifications

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注